classdef ElementFactory
    % 单元工厂方法，为组装器类提供单元对象，生成新单元时，只需要在这里注册

    methods(Static)
        function element = createElement(elementType, connectivity, material)
            % 要根据具体单元类型进行扩展, 定义积分规则
            fprintf('创建单元: 类型=%d, 连接节点数=%d\n', elementType, length(connectivity));

            try
                switch elementType
                    case 1
                        % 桁架单元
                        fprintf('创建桁架单元，连接: %s\n', mat2str(connectivity));
                        disp(class(material))
                        element = TrussElement(connectivity, material); % 采用默认1点积分
                        disp("创建桁架成功")
                    case 2
                        % 4节点四边形单元
                        fprintf('创建四边形单元，连接: %s\n', mat2str(connectivity));
                        element = PlaneElement(connectivity, material); %采用默认 2x2积分
                    otherwise
                        element = [];
                        warning('不支持的单元类型: %d', elementType);
                end

            catch E
                warning(E.identifier,'单元创建失败: %s', E.message);
                element = [];
            end
        end
    end
end